ICTSC2019 二次予選 問題解説: MySQLに繋がりません!
問題文
先輩がMySQLサーバを立てて、新しく運用を開始したらしい。
そのサーバを利用するため、rootパスワードを教えて貰ったため、今までどおりのログインコマンドを試してみた。
$ mysql -uroot -p -h 192.168.0.100
だが、なぜかログインエラーが出てしまい先輩のサーバにアクセスできない。先輩はサーバ上で正しく動いているらしいので、トラブルシューティングのためにそのサーバへのアクセス権限をもらった。
クライアントサーバから上記のコマンドを実行し、rootユーザがログインできるように変更を加え、下記の内容を報告してほしい。
- ログインできるようになるためどのような作業を行ったのか
- なぜログインが行えなかったのか
問題サーバー
クライアント
- IPアドレス: 192.168.0.101
- ユーザー: admin
- パスワード: USerPw@19
サーバ
- IPアドレス: 192.168.0.100
- ユーザー: admin
- パスワード: USerPw@19
- DBユーザー: root
- DBパスワード: root
問題解説
本問題ではMySQL 8系から導入された認証形式であるcaching_sha2_password
が古いMySQLクライアントでは対応していないために発生しているエラーでした。
クライアントサーバから実際にログインしてみようとコマンドを実行すると以下のようなエラーが出ていたかと思います。
$ mysql -uroot -p -h 192.168.0.100
Enter password:
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
このエラーメッセージからなんらかの認証回りでエラーが起きており、回答に気づくシナリオでした。
実際にMySQLサーバの起動しているホストにログインするとMySQL 8系のパッケージがインストールされており、クライアント側のサーバではMySQL 5.7.21のパッケージがインストールされていました。
具体的な回答としては以下のものを想定していました。
- クライアント側のサーバにインストールされているMySQLクライアントのバージョンを
caching_sha2_password
に対応したものをインストールする- 5.7系であれば5.7.23以上、8系であればどのバージョンでも対応しています
- rootユーザのログインに用いる認証形式を古い形式に変更する
mysql_native_password
に変更する事で古いMySQLクライアントでもログインすることが可能になります
ちなみに、問題文の中で「先輩がMySQLサーバを立てて運用を開始した」という文面がありましたが、実際にMySQLサーバ側からmysql
コマンドを用いると特にエラーが出力されないままログインに成功します。
MySQLサーバ側にはMuSQL 8系のパッケージがインストールされており、MySQLクライアントも8系のものがインストールされているためcaching_sha2_password
に対応しておりログインが可能であった、というシナリオでした。
この問題を通して新しいMySQL認証プラグインであるcaching_sha2_password
について知っていただければ幸いです。